Allt som har med OpenBSD att göra plus allt annat!
You are not logged in.
Hallo. Jag kanske är helt fel ute, men jag tar risken...
OpenBSD gillar inte trådar, pthreads-trådar delas inte upp mellan olika processorer/kärnor, exempelvis. Därför vill man såklart dela sina minnesareor mellan olika processer för att uppnå exakt samma sak, antar jag. Det finns ett par olika funktioner för det.. Men vilka *ska* man använda?
shmget(), shmat(), shmdt() och shmctl() är någon sorts funktioner för att allokera delat minne, koppla ihop sig till det, koppla loss från det och kontrollera det. Problemet här är att jag inte har någon idé för hur man skickar iväg information till de andra processerna, efter att man har skapat det delade minnet, så att de också kan öppna det med shmat(). shmget() returerar en identifikator som de andra processerna kan använda för att öppna samma minne, men.. eh. Hur skickar jag iväg den identifikatorn till de andra processerna så att de kan öppna det delade minnet, så att de kan kommunicera med varandra? Ganska mycket moment 22. Ska man lösa det med andra typer av kommunikation (skriva till en fil, skicka över en unix socket...) eller hur har folk tänkt?
När jag letade runt i man-sidorna hittade jag ett till sätt, som de liksom föreslog. Det verkar våldsamt sämst dock, men det löser nog problemet med att processerna hittar samma minnesarea. Alla processer kan ju helt enkelt bara öppna en fil, mmap()'a den, och börja skriva till varandra via den. Det ska visst funka? ..Men, det är lite suboptimalt känns det som.
Så, vad ska man använda?
Tack för svar ![]()
Last edited by xor (2009-01-31 03:51:47)
Offline
Jag hittade en exempelkod som någon hade skrivit för shmget() och shmat(). Det funkar ganska bra och kompilerar utan varningar för OpenBSD (4.4. med standardinstallationen av gcc) nu när jag har formulerat om koden lite.
Om någon annan har problem med samma sak i framtiden kan det ju vara kul att veta hur man gör ![]()
http://pastebin.com/f79435254
Last edited by xor (2009-01-31 12:27:54)
Offline
Okej. Det var ju knappast rätt. Man ska använda mmap() för att dela minne mellan processer.. shm är en asgammal POSIX-standard som finns för att behålla kompabilitet bara.
Offline
Hehe,
Råkar du ha en pastebin för rätt stil med mmap också?
Offline